package com.cskaoyan.variable;


/*
    1.
     byte b1 = 1, b2 = 2, b;
     b = b1+ b2;
     b= 1 + 2;
     哪句是编译失败的呢？为什么呢？
     首先，大家之所以会认为，第一行和第三行代码会报错，原因是一个整数常量值，默认属于int数据类型
     byte b = 整数常量值   相当于  大数据类型的值 ——> 小数据类型的值(丢失精度)
     但是，实际上它们却并没有报错原因是:
         编译器在编译的时候，自动做了检查，编译器是可以认识常量值，判断常量值是否在byte数据类型
         的表示范围之内

    2.
      byte b = 129;
     这句代码有没有问题？
     如果有问题，是否有办法完成上述赋值功能？


 */
public class Exercise {

    public static void main(String[] args) {
        // 第一题
        byte b1 = 1, b2 = 2, b;
        b= 1 + 2;
        //  byte,short,char相互之间不转换，他们参与运算首先转换为int类型
        //  有同学会觉得疑惑，为啥这里编译器就不能在自动判断值的范围了呢？编译器是无法知道变量的值
        //b = b1+ b2;
        //b = b1 + 10;


        //第二题
        // 报错的原因是因为，编译器经过判断发现129值，超出了byte所表示的范围(-128 - 127)
        //byte byteValue = 129;

        // 可以通过强制类型转化，完成赋值
        byte byteValue = (byte) 129;
        //  int: 00000000 00000000 00000000 10000001
        //  byte:  10000001
        //         11111111  -127
        System.out.println(byteValue); // -127


        // 还有一种特殊情况
        //  一个整数常量值 默认数据类型 int
        long longValue = 9999999999L;
    }
}
